Міністерство науки і освіти України
Національний університет “Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
кафедра програмного забезпечення
Звіт з лабораторної роботи №7
з дисципліни “Об’єктно-орієнтоване програмування ”
Тема: Наслідуванням класів з використанням віртуальних функцій
Завдання
Створити об’єкти для роботи з класами згідно завдання, використовуючи наслідування, абстрактні класи, віртуальні функції. Роботу з похідними об’єктами здійснювати через вказівник типу базового класу.
Варіанти
Робота з плоскими фігурами: трикутник, квадрат, коло.
Для даних об’єктів, базовим класом являється клас “ плоска фігура ”.
Необхідно використати віртуальні функції для обчислення площ і визначення належності точок фігурам.
Необхідно ввести N точок Pi(x, y), N>= 3
Вивести назви і площі фігур, яким належать введені точки Pi(x, y)
Відсортувати фігури в порядку спадання значень їх площ.
Текст програми
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include<math.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
class Fihyru
{
public:
virtual double square(int,int,int,int,int,int,int,int){return 0;}
void sort(double Spr,double Str,double Sel);
};
class Priamokytnuk :public Fihyru
{
public:
int x1,x2,x3,y1,y2,y3;
double Spr;
double square(int x1,int x2,int x3,int y1,int y2,int y3,int,int);
};
class Trukytnuk :public Fihyru
{
public:
int x1,x2,x3,y1,y2,y3;
double Str;
double square(int x1,int x2,int x3,int y1,int y2,int y3,int,int);
};
class Elips:public Fihyru
{
public:
int x1,x2,x3,x4,y1,y2,y3,y4;
double Sel;
double square(int x1,int x2,int x3,int x4,int y1,int y2,int y3,int y4);
};
double Priamokytnuk::square(int x1,int x2,int x3,int y1,int y2,int y3,int,int)
{
double Sa,Sb,S;
Sa=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
Sb=sqrt(pow((x2-x3),2)+pow((y2-y3),2));
S=Sa*Sb;
return S;
}
double Trukytnuk::square(int x1,int x2,int x3,int y1,int y2,int y3,int,int)
{
double Sa,Sb,Sc,ppr,S;
Sa=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
Sb=sqrt(pow((x2-x3),2)+pow((y2-y3),2));
Sc=sqrt(pow((x1-x3),2)+pow((y1-y3),2));
ppr=(Sa+Sb+Sc)/2;
S=sqrt(ppr*(ppr-Sa)*(ppr-Sb)*(ppr-Sc));
return S;
}
double Elips::square(int x1,int x2,int x3,int x4,int y1,int y2,int y3,int y4)
{
double S,Sb,Sa;
Sa=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
Sb=sqrt(pow((x3-x4),2)+pow((y3-y4),2));
S=3.14*sqrt(pow(Sa,2)+pow(Sb,2))/2;
return S;
}
void Fihyru::sort(double Spr,double Str,double Sel)
{
if((Spr>=Str)&&(Spr>=Sel))
{
Form1->Label1->Caption=Form1->Label1->Caption+"Прямокутник S="+FloatToStr(Spr);
if(Str>=Sel)
{
Form1->Label2->Caption=Form1->Label2->Caption+"Трикутник S="+FloatToStr(Str);
Form1->Label3->Caption=Form1->Label3->Caption+"Еліпс S="+FloatToStr(Sel);
}
else
{
Form1->Label2->Caption=Form1->Label2->Caption+"Еліпс S="+FloatToStr(Sel);
Form1->Label3->Caption=Form1->Label3->Caption+"Трикутник S="+FloatToStr(Str);
}
}
else if((Str>=Spr)&&(Str>=Sel))
{
Form1->Label1->Caption=Form1->Label1->Caption+"Трикутник S="+FloatToStr(Spr);
if(Spr>=Sel)
{
Form1->Label2->Caption=Form1->Label2->Caption+"Прямокутник S="+FloatToStr(Str);
Form1->Label3->Caption=Form1->Label3->Caption+"Еліпс S="+FloatToStr(Sel);
}
else
{
Form1->Label2->Caption=Form1->Label2->Caption+"Еліпс S="+FloatToStr(Sel);
Form1->Label3->Caption=Form1->Label3->Caption+"Прямокутник S="+FloatToStr(Str);
}
}
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{Label4->Caption="Введіть координати точок прямокутника:";
Label5->Caption="Введіть координати точок трикутника:";
Label6->Caption="В...